package com.supermap.hn.traffic.helper;


import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

public class XMLHelper {


    //解析XML-IO流 ，获取Document 对象，以及Document对象 的根节点
    public static Element getRootElementFromPath(String filepath) throws Exception {

        InputStream xmlIns = new FileInputStream(new File(filepath));

        if (xmlIns == null) {
            return null;
        }
        /*
         * javax.xml.parsers 包中的DocumentBuilderFactory用于创建DOM模式的解析器对象 ，
         * DocumentBuilderFactory是一个抽象工厂类，它不能直接实例化，但该类提供了一个newInstance方法 ，
         * 这个方法会根据本地平台默认安装的解析器，自动创建一个工厂的对象并返回。
         */
        //调用 DocumentBuilderFactory.newInstance() 方法得到创建 DOM 解析器的工厂
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

        //调用工厂对象的 newDocumentBuilder方法得到 DOM 解析器对象。
        DocumentBuilder docBuilder = factory.newDocumentBuilder();

        //调用 DOM 解析器对象的 parse() 方法解析 XML 文档，得到代表整个文档的 Document 对象，进行可以利用DOM特性对整个XML文档进行操作了。
        Document doc = docBuilder.parse(xmlIns);

        //得到 XML 文档的根节点
        Element root = doc.getDocumentElement();

        //关闭流
        if (xmlIns != null) {
            xmlIns.close();
        }

        return root;
    }


    //从元素解析特定子元素并解析
    public static String getElementByName(Element ele, String name) {
        String value = null;
        NodeList propertyEleList = ele.getElementsByTagName(name);//根据标签名称获取标签元素列表
        for(int i=0; i<propertyEleList.getLength(); i++ ){
            Node node = propertyEleList.item(i);
            if (node instanceof Element) {
                 value = node.getTextContent();
            }
        }
        return value;
    }
}
